package JLog;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author cmerino
 * @version 1.0
 * 
 */
public class ClassJLog {

    /***                     ATRIBUTOS PÚBLICOS                        ***/
    /***                     ATRIBUTOS PRIVADOS                        ***/
    private String path_class_log;
    private String file_class_log;
    private String path_log;
    private String file_log;
    private String __PROPERTIE;
    private boolean __SAVE_DB = false;
    private boolean __SAVE_FL = true;
    private final String __DEBUG = "DEBUG  ";
    private final String __INFO = "INFO   ";
    private final String __NOTICE = "NOTICE ";
    private final String __WARNING = "WARNING";
    private final String __ERROR = "ERROR  ";
    private final String __CRIT = "CRIT   ";
    private final String __ALERT = "ALERT  ";
    private final String __PANIC = "PANIC  ";

    /*********************************************************************/
    /***                       MÉTODOS PÚBLICOS                        ***/
    /*********************************************************************/
    /**
     * 
     * Constructor de la Clase <b>ClassJLog</b>.
     * Define el Code Type (<code>__CODE_TYPE_STR_LOG</code>) como 1
     * 
     * 
     */
    public ClassJLog() throws Exception {
        this.path_class_log = "C:\\TMP\\";
        this.file_class_log = "estanques.log";
        this.path_log = this.path_class_log;
        this.file_log = this.file_class_log;
        this.__SAVE_DB = false;
        this.__SAVE_FL = true;
    }

    public ClassJLog(String opc) throws Exception {
        this.path_class_log = "C:\\TMP\\";
        this.file_class_log = "estanques.log";
        this.path_log = this.path_class_log;
        this.file_log = this.file_class_log;
        this.__SAVE_DB = false;
        this.__SAVE_FL = false;

        if (opc.length() != 2) {
            String strError = "Error de inicialización de opciones de registro de log.\n"
                    + "El tamaño del string de setup debe ser siempre de tamaño 2.";
            throw (new Exception(strError, new Throwable()));
        } else {
            if (!"1".equals(opc.substring(0, 1)) && !"0".equals(opc.substring(0, 1))) {
                String strError = "Error, el FLAG de SET para almacenaje en la Base de Datos sólo puede ser 1 ó 0.";
                throw (new Exception(strError, new Throwable()));
            } else if (!"1".equals(opc.substring(1, 2)) && !"0".equals(opc.substring(1, 2))) {
                String strError = "Error, el FLAG de SET para almacenaje en el archivo de registro de log sólo puede ser 1 ó 0.";
                throw (new Exception(strError, new Throwable()));
            } else {
                if ("1".equals(opc.substring(0, 1))) {
                    this.__SAVE_DB = true;
                }
                if ("1".equals(opc.substring(1, 2))) {
                    this.__SAVE_FL = true;
                }
            }
        }

    }

    /*
     * Este constructor responde a la siguiente asignación de código, basada en
     * el sistemás binario:
     *                          valor    DB    FL
     *                          -------------------
     *                            0     false false
     *                            1     false true
     *                            2     true  false
     *                            3     true  true
     */
    public ClassJLog(int opc) throws Exception {
        this.path_class_log = "C:\\TMP\\";
        this.file_class_log = "estanques.log";
        this.path_log = this.path_class_log;
        this.file_log = this.file_class_log;
        this.__SAVE_DB = false;
        this.__SAVE_FL = false;

        if (opc >= 0 && opc <= 3) {
            if (opc == 2 || opc == 3) {
                this.__SAVE_DB = true;
            }
            if (opc == 1 || opc == 3) {
                this.__SAVE_FL = true;
            }
        } else {
            String strError = "El valor de SET genérico para almacenaje del log sólo soporta valores entre 0 y 3.";
            throw (new Exception(strError, new Throwable()));
        }
    }

    public String getFile_log() {
        return file_log;
    }

    public void setFile_log(String file_log) {
        this.file_log = file_log;
    }

    public String getPath_log() {
        return path_log;
    }

    public void setPath_log(String path_log) {
        this.path_log = path_log;
    }

    private void saveMsg(ClassMensaje objMensaje) throws Exception {
        try {
            if (__SAVE_FL) {
                objMensaje.writeIntoFile(this.path_log + this.file_log);
            }
        } catch (Exception ex) {
            String strError = "Error al intentar guardar el mensaje log en el archivo " + this.getPath_log() + this.getFile_log();
            throw (new Exception(strError + ex.getMessage(), ex));
        }
        try {
            if (__SAVE_DB) {
                objMensaje.writeIntoBD(1);      //  debe venir de propertie
            }
        } catch (Exception ex) {
            String strError = "Error al intentar guardar el mensaje log en la base de datos.";
            throw (new Exception(strError + ex.getMessage(), ex));
        }

    }

    public void debug(String __STR_MENSAJE) throws Exception {
        //  MENSAJE DE DEPURACIÓN
        ClassMensaje objMensaje = new ClassMensaje(this.__DEBUG, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void debug(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  MENSAJE DE DEPURACIÓN
        ClassMensaje objMensaje = new ClassMensaje(this.__DEBUG, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void debug(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  MENSAJE DE DEPURACIÓN
        ClassMensaje objMensaje = new ClassMensaje(this.__DEBUG, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void debug(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  MENSAJE DE DEPURACIÓN
        ClassMensaje objMensaje = new ClassMensaje(this.__DEBUG, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void info(String __STR_MENSAJE) throws Exception {
        //  MENSAJE INFORMATIVO
        ClassMensaje objMensaje = new ClassMensaje(this.__INFO, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void info(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  MENSAJE INFORMATIVO
        ClassMensaje objMensaje = new ClassMensaje(this.__INFO, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void info(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  MENSAJE INFORMATIVO
        ClassMensaje objMensaje = new ClassMensaje(this.__INFO, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void info(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  MENSAJE INFORMATIVO
        ClassMensaje objMensaje = new ClassMensaje(this.__INFO, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void notice(String __STR_MENSAJE) throws Exception {
        //  CONDICIÓN NORMAL, PERO SIGNIFICATIVA
        ClassMensaje objMensaje = new ClassMensaje(this.__NOTICE, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void notice(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  CONDICIÓN NORMAL, PERO SIGNIFICATIVA
        ClassMensaje objMensaje = new ClassMensaje(this.__NOTICE, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void notice(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  CONDICIÓN NORMAL, PERO SIGNIFICATIVA
        ClassMensaje objMensaje = new ClassMensaje(this.__NOTICE, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void notice(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  CONDICIÓN NORMAL, PERO SIGNIFICATIVA
        ClassMensaje objMensaje = new ClassMensaje(this.__NOTICE, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void warning(String __STR_MENSAJE) throws Exception {
        //  HAY CONDICIONES DE ADVERTENCIA
        ClassMensaje objMensaje = new ClassMensaje(this.__WARNING, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void warning(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  HAY CONDICIONES DE ADVERTENCIA
        ClassMensaje objMensaje = new ClassMensaje(this.__WARNING, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void warning(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  HAY CONDICIONES DE ADVERTENCIA
        ClassMensaje objMensaje = new ClassMensaje(this.__WARNING, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void warning(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  HAY CONDICIONES DE ADVERTENCIA
        ClassMensaje objMensaje = new ClassMensaje(this.__WARNING, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void error(String __STR_MENSAJE) throws Exception {
        //  HAY CONDICIONES DE ERROR
        ClassMensaje objMensaje = new ClassMensaje(this.__ERROR, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void error(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  HAY CONDICIONES DE ERROR
        ClassMensaje objMensaje = new ClassMensaje(this.__ERROR, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void error(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  HAY CONDICIONES DE ERROR
        ClassMensaje objMensaje = new ClassMensaje(this.__ERROR, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void error(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  HAY CONDICIONES DE ERROR
        ClassMensaje objMensaje = new ClassMensaje(this.__ERROR, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void crit(String __STR_MENSAJE) throws Exception {
        //  LAS CONDICIONES SON CRÍTICAS
        ClassMensaje objMensaje = new ClassMensaje(this.__CRIT, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void crit(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  LAS CONDICIONES SON CRÍTICAS
        ClassMensaje objMensaje = new ClassMensaje(this.__CRIT, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void crit(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  LAS CONDICIONES SON CRÍTICAS
        ClassMensaje objMensaje = new ClassMensaje(this.__CRIT, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void crit(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  LAS CONDICIONES SON CRÍTICAS
        ClassMensaje objMensaje = new ClassMensaje(this.__CRIT, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void alert(String __STR_MENSAJE) throws Exception {
        //  SE DEBE TOMAR UNA ACCIÓN CORRECTORA INMEDIATAMENTE
        ClassMensaje objMensaje = new ClassMensaje(this.__ALERT, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void alert(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  SE DEBE TOMAR UNA ACCIÓN CORRECTORA INMEDIATAMENTE
        ClassMensaje objMensaje = new ClassMensaje(this.__ALERT, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void alert(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  SE DEBE TOMAR UNA ACCIÓN CORRECTORA INMEDIATAMENTE
        ClassMensaje objMensaje = new ClassMensaje(this.__ALERT, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void alert(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  SE DEBE TOMAR UNA ACCIÓN CORRECTORA INMEDIATAMENTE
        ClassMensaje objMensaje = new ClassMensaje(this.__ALERT, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void panic(String __STR_MENSAJE) throws Exception {
        //  EL SISTEMA ESTÁ INUTILIZABLE
        ClassMensaje objMensaje = new ClassMensaje(this.__PANIC, __STR_MENSAJE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void panic(String __STR_MENSAJE, String __METHOD) throws Exception {
        //  EL SISTEMA ESTÁ INUTILIZABLE
        ClassMensaje objMensaje = new ClassMensaje(this.__PANIC, __STR_MENSAJE, __METHOD);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void panic(String __STR_MENSAJE, String __METHOD, String __USUARIO) throws Exception {
        //  EL SISTEMA ESTÁ INUTILIZABLE
        ClassMensaje objMensaje = new ClassMensaje(this.__PANIC, __STR_MENSAJE, __METHOD, __USUARIO);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void panic(String __STR_MENSAJE, String __METHOD, String __USUARIO, String __AMBIENTE) throws Exception {
        //  EL SISTEMA ESTÁ INUTILIZABLE
        ClassMensaje objMensaje = new ClassMensaje(this.__PANIC, __STR_MENSAJE, __METHOD, __USUARIO, __AMBIENTE);
        try {
            this.saveMsg(objMensaje);
        } catch (Exception ex) {
            Logger.getLogger(ClassJLog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
